﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace C_初级教程
{
    public class Person
    {
        //面向对象语言三大特征：  封装、继承、多态

        // 1、封装：
        // 把一类对象的特征和行为分装在一个逻辑区域内。     在设计中封装是为了防止对具体实现细节的访问。

        /**(1)、访问修饰符
                    ①、public 所有对象都可以访问
                    ②、private 对象本身在对象内部进行访问
                    ③、protected  只有该类对象以及该类子类对象可以访问
                    ④、internal   同一个程序集的对象可以访问(同命名空间内可以访问)
        **/

        /**
           (2)、封装的实现方式：
                        ①、类的封装
                        ②、属性的封装
                        ③、方法的封装
        **/


        //2、类：
        /**
                类是对一群具有相同属性和行为的对象的逻辑抽象。

                    访问标识符 指定了对类及其成员的访问规则。如果没有指定，则使用默认的访问标识符。类的默认访
                问标识符是 internal，成员的默认访问标识符是 private。
        **/
        //字段与属性的区别：(属性是对类的字段的封装，属性的底层也是有字段的)   字段和属性统称为成员变量
        //①、字段是私有的，不能从对象外部访问；属性是公开的，是对象向外暴露的特征(public)
        //②、属性具有访问器(get,set)
        //③、字段命名，以小驼峰命名，属性以帕斯卡(大驼峰)命名。
        //④、属性并没有真正存储数据

        //1、字段(类中的字段一般是私有的)

        string name;
        int height;
        string idCard;
        //2、属性
            public string Name
            {
                get { return name; } set { name = value; }
            }
            public int Height
            {
                get { return height; }
                set { height = value; }
            }
            public string IdCard
            {
                get { return idCard; }
                set { idCard = value; }
            }




        //构造函数
        //如果一个类，你没有自定义构造函数，那系统就会提供一个无参数的默认构造函数
        // 一旦你自己写了构造函数，那系统将不再提供默认构造函数

        //无参构造函数(自定义构造函数时，一定要写一下)
        public Person()
        {

        }

        /// <summary>
        /// 有参构造函数
        /// </summary>
        /// <param name="name"></param>
        /// <param name="height"></param>
        /// <param name="idCard"></param>
        public Person(string name, int height, string idCard)
        {
            this.Name =name;
            this.Height =height;
            this.IdCard =idCard;    
        }
    }
}
